// app.js
// 注释掉MQTT导入，避免模块找不到的错误
// import mqttManager from './utils/mqtt.js'
import alarmDataManager from './utils/alarmData.js'

// 导入认证管理器和API
const authManager = require('./utils/auth.js')
const api = require('./utils/api.js')

App({
  onLaunch: function () {
    console.log('校园防欺凌报警器启动')
    
    // 初始化全局数据
    this.globalData = {
      userInfo: null,
      deviceStatus: {
        isConnected: false,
        battery: 0,
        signal: 0,
        lastUpdate: 0
      },
      audioData: {
        soundLevel: 0,
        soundType: 'normal',
        frequency: 0,
        alert: false,
        confidence: 0,
        timestamp: 0
      },
      locationData: {
        latitude: 0,
        longitude: 0,
        accuracy: 0,
        address: '',
        timestamp: 0
      },
      mqttConnected: false
    }
    
    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 初始化认证管理器
    authManager.init()
    
    // 初始化报警数据管理
    this.alarmManager = alarmDataManager
    
    // 初始化WebSocket连接（如果用户已登录）
    this.initWebSocket()
    
    // 暂时注释掉MQTT初始化
    // this.initMQTT()
  },
  
  onShow: function() {
    console.log('应用显示')
  },
  
  onHide: function() {
    console.log('应用隐藏')
  },
  
  onError: function(msg) {
    console.error('应用错误:', msg)
  },

  /**
   * 初始化MQTT连接
   */
     initMQTT() {
     console.log('MQTT初始化已暂时禁用')
     // 暂时注释掉MQTT相关代码
     /*
     // 设置MQTT事件回调
     mqttManager.notifyConnectionStatus = (isConnected) => {
       this.globalData.mqttConnected = isConnected
       console.log('MQTT连接状态:', isConnected)
       
       // 通知所有页面更新连接状态
       this.notifyPages('onMQTTStatusChange', { connected: isConnected })
     }
     
     mqttManager.notifyAlarmReceived = (alarmRecord) => {
       console.log('收到新报警:', alarmRecord)
       
       // 通知所有页面有新报警
       this.notifyPages('onNewAlarm', alarmRecord)
       
       // 显示系统通知
       if (alarmRecord.level === 'high' || alarmRecord.level === 'critical') {
         wx.showModal({
           title: '⚠️ 紧急报警',
           content: `检测到紧急情况，请立即查看！`,
           confirmText: '立即查看',
           cancelText: '稍后处理',
           success: (res) => {
             if (res.confirm) {
               wx.switchTab({
                 url: '/pages/home/home'
               })
             }
           }
         })
       }
     }
     
     mqttManager.notifyDeviceStatusChanged = (status) => {
       this.globalData.deviceStatus = {
         ...this.globalData.deviceStatus,
         ...status,
         lastUpdate: Date.now()
       }
       
       // 通知页面更新设备状态
       this.notifyPages('onDeviceStatusChange', status)
     }
     
     mqttManager.notifyAudioDataUpdated = (data) => {
       this.globalData.audioData = {
         ...this.globalData.audioData,
         ...data,
         timestamp: Date.now()
       }
       
       // 通知页面更新音频数据
       this.notifyPages('onAudioDataUpdate', data)
     }
     
     // 尝试连接MQTT（如果有配置）
     // 注意：实际项目中应该在用户登录后再连接
     // mqttManager.connect().catch(error => {
     //   console.log('MQTT连接失败，可能是配置问题:', error)
     // })
     */
   },

  /**
   * 通知所有页面
   */
  notifyPages(method, data) {
    const pages = getCurrentPages()
    pages.forEach(page => {
      if (typeof page[method] === 'function') {
        page[method](data)
      }
    })
  },

  /**
   * 获取报警管理器
   */
  getAlarmManager() {
    return this.alarmManager
  },

  /**
   * 获取MQTT管理器
   */
  getMQTTManager() {
    // 暂时返回空对象，避免错误
    return {
      connect: () => Promise.reject('MQTT暂未配置'),
      sendCommand: () => false,
      disconnect: () => {}
    }
    // return mqttManager
  },

  /**
   * 初始化WebSocket连接
   */
  async initWebSocket() {
    try {
      if (!authManager.isLoggedIn) {
        console.log('用户未登录，跳过WebSocket初始化')
        return
      }
      
      // 设置WebSocket回调
      api.websocket.setCallbacks({
        onMessage: (message) => {
          this.handleWebSocketMessage(message)
        },
        onClose: () => {
          console.log('WebSocket连接已关闭')
          // 可以设置重连逻辑
        },
        onError: (error) => {
          console.error('WebSocket连接错误:', error)
        }
      })
      
      // 连接WebSocket
      await api.websocket.connect()
      console.log('WebSocket初始化成功')
    } catch (error) {
      console.error('WebSocket初始化失败:', error)
      // WebSocket连接失败不影响主要功能
    }
  },

  /**
   * 处理WebSocket消息
   */
  handleWebSocketMessage(message) {
    console.log('收到WebSocket消息:', message)
    
    switch (message.type) {
      case 'alarm_status_update':
        // 报警状态更新
        this.notifyPages('onAlarmStatusUpdate', message.data)
        break
        
      case 'new_alarm':
        // 新报警通知
        this.notifyPages('onNewAlarm', message.data)
        break
        
      case 'device_status':
        // 设备状态更新
        this.globalData.deviceStatus = {
          ...this.globalData.deviceStatus,
          ...message.data
        }
        this.notifyPages('onDeviceStatusChange', message.data)
        break
        
      case 'system_notification':
        // 系统通知
        wx.showModal({
          title: message.data.title || '系统通知',
          content: message.data.content || '',
          showCancel: false
        })
        break
        
      default:
        console.log('未处理的WebSocket消息类型:', message.type)
    }
  },

  /**
   * 获取认证管理器
   */
  getAuthManager() {
    return authManager
  },

  /**
   * 获取API实例
   */
  getAPI() {
    return api
  },

  globalData: {
    userInfo: null
  }
})
